home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 31
/
Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso
/
Aminet
/
dev
/
basic
/
UDP_Chat.lha
/
UDPChat
/
Old_Stuff
/
UDP_Receive2.asc
< prev
next >
Wrap
Text File
|
1999-03-29
|
3KB
|
132 lines
;
; UDP receive code
;
; This receives data on its socket (which is bound to a port
; on localhost), from a host that connects to it like TCP
; and receives data with recv_() instead of recvfrom_().
;
; Written by Anton Reinauer <anton@ww.co.nz>.
;
; Thanks to Paul Burkey for TCP_Funcs and to Dr. Ercole Spiteri
; for TCP-to-Blitz.
;
WBStartup
NoCli
Hostname.s="localhost" ; you need to bind to localhost
#PORT=3001 ; port to bind to
INCLUDE "TCPFuncs.bb"
DEFTYPE .w
;********************************************************
.ReadUDP2
Function .s ReadUDP2{}
SHARED sock.l,TCPmem.l
;
; This Function reads data from a connection made from another program
; If there is no messages then it will return an empty string =""
;
sockread.l=0 ;Clear Readmask
sockread.l BitSet sock.l ;Set Readmask on our socket
e=IoctlSocket_(sock.l,#FIONREAD,TCPmem.l) ;How much data is there?
f.l=Peek.l(TCPmem.l) ;Place value in f
If f>0
c=recv_(sock.l,TCPmem.l,f,0) ; read data from the socket
; which is connected to another host as in TCP
If c>0
a=0 : c$=""
Repeat
c$=c$+Chr$(Peek.b(TCPmem+a)) : a+1 ; build string
Until a=c
EndIf
EndIf
Function Return c$
End Function
.ConnectUDP2
Function ConnectUDP2{host$,port.w}
SHARED sock.l,host.sockaddrin,hostlen.w
sock.l=socket_(2,2,0) ; create UDP socket
*a.hostent=gethostbyname_(host$)
;Copy Details to our Sockaddrin structure
bb=CopyMem_(*a.hostent\h_addr_list\ItemA,&host.sockaddrin\sin_addr,*a.hostent\h_length)
host.sockaddrin\sin_port=port ;Set port number
host.sockaddrin\sin_family=2 ;Set type to AT_INET
hostlen=SizeOf.sockaddrin ;Get lenght of structure sockaddrin
If bind_(sock,host,hostlen)=0 ; bind socket to local port number
Function Return True ; so we can receive data on that port
EndIf
End Function
;****************************************
WbToScreen0
Window 0,300,100,320,150,$1|$2|$4|$8|$400,"Receive UDP2",1,2
WindowOutput0
WindowInput 0
If ConnectUDP2 {Hostname,#PORT} ; open socket and bind it to a port number
NPrint "Bound to ",Hostname," ",#PORT
Else
Print "Can't bind to host!"
Goto Exit:
EndIf
ypos=10
;****************************************
.Main
Repeat
Delay_(1)
a$=ReadUDP2{}
If a$<>""
t$=a$
Gosub Print_String
EndIf
ev.l=Event
Until ev=$200 ; shut down if close gadget hit
CloseTCP{} ; close connection
WLocate 10,10
NPrint"Connection closed"
Exit:
; NPrint Errno_ ; print error number if needed
FreeMem TCPmem.l,$2000
Delay_(50)
End
;****************************************
.Print_String
ypos+10
If ypos=130 Then ypos=20
WLocate 10,ypos
Print " "
WLocate 10,ypos
Print "RECEIVED: ",t$ ; print string received
Return